#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time          : 2024/5/28 9:52
# File          : time_handle.py
# @Author       : MingTai
# @Department   : automation_qa

# 统计时间
import datetime
import time
from functools import wraps
from datetime import datetime

from app.utils.log_tool.log_util import log


# 统计函数耗时
def time_consuming_total(func):
    # 使用wraps保留原函数的元信息
    @wraps(func)
    def wrapper(*args, **kwargs):
        start_time = time.time()  # 开始时间
        result = func(*args, **kwargs)  # 调用原函数
        end_time = time.time()  # 结束时间
        duration = end_time - start_time  # 计算执行时间
        log.info(f"函数={func.__name__}，执行耗时={duration:.4f}秒")  # 打印执行时间
        return result

    return wrapper


# 获取当前时间的前7小时59分56秒
def get_before_time():
    return datetime.datetime.strftime(datetime.datetime.now() - datetime.timedelta(hours=7, minutes=59, seconds=56),
                                      '%Y-%m-%d %H:%M:%S')


# 根据时间戳获取时间，返回时间格式：'%Y-%m-%d'
def get_date_by_timestamp(timestamp):
    return datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d')


@time_consuming_total
def data_to_str(data):
    return data.strftime("%Y-%m-%d")


# 根据秒级时间戳获取日期时间,毫秒时间戳转换会报错,返回时间格式：%Y-%m-%d %H:%M:%S
def get_time_timestamp_seconds(timestamp_seconds):
    return datetime.datetime.fromtimestamp(timestamp_seconds).strftime('%Y-%m-%d %H:%M:%S')


# 根据毫秒级时间戳获取日期时间,返回时间格式：%Y-%m-%d %H:%M:%S
def get_time_timestamp_millisecond(timestamp_millisecond):
    return datetime.datetime.fromtimestamp(timestamp_millisecond / 1000).strftime('%Y-%m-%d %H:%M:%S')


# 获取两个时间戳之间的日期列表
def get_dates_between_timestamps(start_timestamp, end_timestamp):
    # 将时间戳转换为datetime对象
    start_date = datetime.datetime.fromtimestamp(start_timestamp).date()
    end_date = datetime.datetime.fromtimestamp(end_timestamp).date()

    # 计算两个日期之间的差值
    delta = end_date - start_date

    # 生成日期列表
    date_list = [(start_date + datetime.timedelta(days=i)).strftime('%Y-%m-%d') for i in range(delta.days + 1)]

    return date_list


# 获取当前时间，精确到分钟， eg:202503271601
def get_time_str():
    return datetime.now().strftime("%Y%m%d%H%M")


# 格式化为字符串,精确到秒 格式：'YYYYMMDDHHMMSS'  eg:20250328143253
def get_second_time_str():
    return datetime.now().strftime("%Y%m%d%H%M%S")


if __name__ == '__main__':
    get_time_str()
